---
title: "Water Shiny Dashboard"
output:
flexdashboard::flex_dashboard:
orientation: columns
vertical_layout: fill
source: embed
runtime: shiny
---
```{r}
library(tidyverse)
library(shiny)
library(flexdashboard)
library(leaflet)
```
```{r}
elk = read.csv(file = "clean_data/elk.csv") |>
mutate(date = as.Date(paste(year, month, day, sep = "-")))
water_quality = read.csv(file = "clean_data/water_quality.csv") |>
mutate(date = as.Date(paste(year, month, day, sep = "-"))) |>
filter(location_id %in% c("GRTE_SNR01", "GRTE_SNR02", "YELL_LM000.5M", "YELL_YS549.7M", "YELL_MD133.2T", "YELL_MDR"))
```
-----------------------------------------------------------------------
```{r}
ui = fluidPage(
titlePanel("Water Quality Over Time"),
sidebarLayout(
sidebarPanel(
sliderInput("year_slider",
"Select Year:",
min = 2006,
max = 2015,
value = 2013,
step = 1),
sliderInput("month_slider",
"Select Month:",
min = 1,
max = 12,
value = 5,
step = 1),
selectInput("characteristic",
"Select Water Quality Characteristic:",
choices = unique(water_quality$characteristic_name),
selected = "Arsenic mg/l")
),
mainPanel(
leafletOutput("elkMap", height = 500),
plotOutput("waterQualityPlot", height = 400)
)
)
)
```
Column {data-width=650}
-----------------------------------------------------------------------
### Water Quality Plot
```{r}
elk_icon = makeIcon(
iconUrl = "data/elk_icon.png",
iconWidth = 30,
iconHeight = 30)
water_icon = makeIcon(
iconUrl = "data/water_droplet.png",
iconWidth = 30,
iconHeight = 30)
```
```{r}
server = function(input, output) {
filtered_data = reactive({
water_quality |>
filter(characteristic_name == input$characteristic,
format(date, "%Y") == as.character(input$year_slider),
format(date, "%m") == sprintf("%02d", input$month_slider)) |>
mutate(result_text = as.numeric(result_text))
})
filtered_elk = reactive ({
elk |>
filter(format(date, "%Y") == as.character(input$year_slider),
format(date, "%m") == sprintf("%02d", input$month_slider))
})
output$elkMap = renderLeaflet({
filtered_water_quality = filtered_data()
filtered_elk_data = filtered_elk()
map = leaflet() |>
addTiles()
if(nrow(filtered_water_quality) > 0) {
map = map |>
addMarkers(
data = filtered_water_quality,
~longitude, ~latitude,
icon = water_icon,
popup = ~paste("Characteristic: ", characteristic_name,
"<br>Value: ", result_text,
"<br>Date: ", date),
group = "Water Quality"
)
}
if (nrow(filtered_elk_data) > 0) {
map = map |> addMarkers(
data = filtered_elk_data,
~long, ~lat,
icon = elk_icon,
popup = ~paste("Elk Path", "<br>Date: ", date),
group = "Elk Path"
)
}
map = map |>
addLayersControl(
overlayGroups = c("Water Quality", "Elk Path"),
options = layersControlOptions(collapsed = FALSE)
)
map
})
output$waterQualityPlot = renderPlot ({
data - filtered_data()
if(nrow(data) > 0) {
ggplot(data, aes(x = date, y = as.numeric(result_text))) +
geom_point() +
labs(
title = paste("Water Quality of:", input$characteristic, "in", input$month_slider, input$year_slider),
x = "Date",
y = paste(input$characteristic, "(mg/l)")
)
} else {
ggplot() +
labs(title = "No data available for the selected year and month")
}
})
}
```
```{r}
shinyApp(ui = ui, server = server)
#command to knit dashboaord (leaving this here for now, will remove before final submission):
#rmarkdown::render("water_shiny_dashboard.Rmd", output_format = "flexdashboard::flex_dashboard")
```